package it.unicam.ids.pvm.postazione;

/**
 * La classe rappresenta il lettore delle chiavette, in grado 
 * di rilevare l'inserimento di una chiavetta e di gestirne 
 * il contenuto. Contiene i seguenti attributi:
 * inserita, true se la chiave è inserita;
 * credito, credito contenuto nella chiavetta;
 * postazione, postazione di vendita su cui è stata 
 * inserita la chiavetta.
 * @author Luca Iachini, Valerio Iachini, Alessandro Cardenà
 *
 */
public class LettoreChiavetta {
	
	private boolean inserita;
	private double credito = 0.0;
	public PostazioneDiVendita postazione;

	/**
	 * Costruttore della classe.
	 * Inizializza la postazione di vendita.
	 * @param postazione.
	 */
	
	public LettoreChiavetta(PostazioneDiVendita postazione) {
		this.postazione = postazione;
	}
	
	/**
	 * Il metodo restituisce il credito nella chiavetta.
	 * @return credito.
	 */

	public double getCredito() {
		return credito;
	}
	
	/**
	 * Il metodo consente di incrementare il credito 
	 * nella chiavetta.
	 * @param valore valore da aggiungere al credito.
	 */

	public void addCredito(double valore) {
		if (inserita)
			credito += valore;

	}

	/**
	 * Il metodo consente di pagare un prodotto acquistato.
	 * @param prezzo prezzo del prodotto.
	 * @throws CreditoInsufficienteException.
	 */
	
	public void paga(double prezzo) throws CreditoInsufficienteException {
		if (credito >= prezzo)
			credito -= prezzo;
		else
			throw new CreditoInsufficienteException();
	}

	/**
	 * Il metodo consente di inserire una chiavetta e 
	 * aumentare il suocredito con quello immesso.
	 * @param credito credito nella chiavetta.
	 * @throws Exception messaggio d'errore relativo 
	 * 						alla validità del credito.
	 */
	
	public void inserisciChiavetta(double credito) throws Exception {
		if (credito < 0)
			throw new Exception("Credito pari a " + credito + " non valido.");
		else {
			GestoreContanti gestoreContanti = postazione.getGestoreContanti();
			this.credito = gestoreContanti.getCredito() + credito;
			gestoreContanti.azzeraCredito();
			inserita = true;
		}
	}
	
	/**
	 * Il metodo consente di rimuovere la chiavetta.
	 */

	public void rimuoviChiavetta() {
		credito = 0;
		inserita = false;
	}
	
	/**
	 * Il metodo consente di convalidare la chiavetta.
	 * @return
	 */

	public boolean valida() {
		throw new UnsupportedOperationException();
	}
	
	/**
	 * il metodo consente di verificare se la chiavetta 
	 * è stata inserita o meno.
	 * @return inserita true se la chiavetta è inserita.
	 */

	public boolean isInserita() {
		return inserita;
	}

}